"""
朴素？ -> 假设特征之间相互独立，简化计算
核心思想：用贝叶斯定理计算后验概率，选择后验概率最大的类别作为预测结果
后验概率：P(类别|特征) = P(特征|类别) * P(类别) / P(特征)
先验概率：P(类别) = 类别出现的概率
拉普拉斯平滑系数：避免某个特征在训练集中没有出现，导致后验概率为0 => 加上一个很小的数，避免出现0概率
"""
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB

# 获取数据集
news = fetch_20newsgroups(data_home="../src")
x, y = news.data, news.target
# 划分数据集
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=22)
# 特征工程：新闻数据集是文本，所以用TF-IDF进行文本特征提取
transfer = TfidfVectorizer()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
# 贝叶斯分类器流程
estimator = MultinomialNB()
estimator.fit(x_train, y_train)
# 模型评估
y_predict = estimator.predict(x_test)
print("准确率：", estimator.score(x_test, y_test))